<?php
include_once '../Exceptions/CommunicationException.php';
include_once '../InfoManager/InfoParking.php';
include_once '../Model/Park.php';
include_once '../Model/Location.php';
include_once '../Model/Address.php';
include_once '../Model/GPS.php';
include_once '../AtacCommunicator/ACParking.php';

//può prendere in input (lat, long, distance(opzionale))
//oppure (via, distance(opzionale))
//oppure parkname
//il parametro distance è opzionale, può non essere dato
//distance permette di ottenere solo i primi 10 parcheggi entro la distanza immessa
//nessun input non è permesso
//più input diversi non sono permessi

/**
 * @author Laura Magrini
 *
 */

$test=null;
$parkname=null;

if ((isset($_GET["lat"])) && (isset($_GET["long"])) && (!isset($_GET["parkname"])) && (!isset($_GET["via"])) ) //sono state inserite le coordinate
{	
	$lat = floatval(RMobUtils::escape_var($_GET["lat"]));
	$long = floatval(RMobUtils::escape_var($_GET["long"]));
	$test = new GPS($lat,$long);
		
}else if(isset($_GET["via"]) && (!isset($_GET["parkname"])) && (!isset($_GET["lat"])) && (!isset($_GET["long"])) ) { //non ho le coordinate, è stata inserita la via
	
	$start = new Location(RMobUtils::escape_var($_GET["via"]),null,null);
	$test = $start->getGPS();

}
else if(isset($_GET["parkname"]) && (!isset($_GET["lat"])) && (!isset($_GET["long"])) && (!isset($_GET["via"])) ){
   $parkname=(RMobUtils::escape_var($_GET["parkname"]));
	$im = new InfoParking();
	$parks=$im->getParkInfo($parkname); //ottengo le info sul parcheggio	
}

else return; //se non vengono settati i parametri non ritorno niente
	if($parkname==null){ //solo se sono settati lat e long/via non parkname
		$im = new InfoParking();
		$parks=$im->getParks(); //ottengo i parcheggi
		if(count($parks)==0)return;
		//verifico se la distanza è settata
		if (isset($_GET["distance"])) $meters=intval(RMobUtils::escape_var($_GET["distance"]));
		else $meters=null;	
		try {
			$conn=new ACParking($parks);
			$conn->getParkStatusAtacAPI(); //verifico la disponibilità dei parcheggi e ordino per disp
			$parks = $im->orderParksWithDistance($meters, $test, $parks);
		}catch (CommunicationException $e) {
			$parks = $im->orderParksWithDistance($meters, $test, $parks);
		}
	}
	else {
	   //ottengo le informazioni sul singolo parcheggio
		if(count($parks)==0)return;
		$conn=new ACParking($parks);
		$conn->getParkStatusAtacAPI(); //verifico la disponibilità dei parcheggi
	}		
	$xml = "";
	
	if ($parks != NULL)
	{
		try {
			
			foreach ($parks as $park)
			{
					//extended mode
					$xml .= $park->toXML(EXTENDED_MODE);
			}
		}
		catch (CommunicationException $e)
		{
			echo $e->toXML(EXTENDED_MODE);
			exit(1);
		}
	}
	unset($im);
	unset($conn);
	$xml = "<PARKAROUND>".$xml."</PARKAROUND>";	
	echo $xml;

?>
